using Xunit;
using System;

namespace LanguageLearnTestCase.Enum
{
    public class StringValueToEnumValue
    {
        public enum EType
        {
            /// <summary>
            /// 默认
            /// </summary>
            NULL,

            /// <summary>
            /// 图片模板活动页
            ///     1. 活动页一
            ///     2. 活动页二
            /// </summary>
            ActivityImgTemplateType = 145,

            /// <summary>
            /// 图片左右格式活动页
            ///     1. 活动页一
            ///     2. 活动页二
            /// </summary>
            ActivityLeftRightFormatType = 146,

            /// <summary>
            /// 自有供应商Id列表, 使用 ',' 英文逗号分隔
            /// </summary>
            SelfOwnSupplyIds = 152,

            /// <summary>
            /// 用户申请加入项目联系状态
            ///     1.未联系
            ///     2.已联系
            /// </summary>
            UserJionProjectLinkStatus = 153,
        }

        [Theory]
        [InlineData("NULL", EType.NULL)]
        [InlineData("ActivityImgTemplateType", EType.ActivityImgTemplateType)]
        [InlineData("UserJionProjectLinkStatus", EType.UserJionProjectLinkStatus)]
        [InlineData("146", EType.ActivityLeftRightFormatType)]
        [InlineData("153", EType.UserJionProjectLinkStatus)]
        [InlineData("EEEEE", EType.NULL)]
        [InlineData("", EType.NULL)]
        [InlineData(null, EType.NULL)]
        public void TestItemStringToValue(string input, EType output)
        {
            EType result = ToEnumValue<EType>(input, EType.NULL);
            Assert.Equal(output, result);
        }

        public static E ToEnumValue<E>(string enumName, E defalutValue = default(E)) where E : struct
        {
            if (!typeof(E).IsEnum)
            {
                return defalutValue;
            }
            if (!System.Enum.TryParse<E>(enumName, out E value))
            {
                value = defalutValue;
            }
            return value;
        }
    }
}
